import filecmp
import os

dir1 = r"\\diskstation3\10T_01\Fitgirl\Cyberpunk 2077 [FitGirl Repack]"
dir2 = r"\\diskstation3\14T_01\fitgirl_10T_01\Cyberpunk 2077 [FitGirl Repack]"
# 初始化结果字典
results = {
    'modified': [],
    'added': [],
    'removed': [],
    'common_dirs': [],
    'errors': []
}
ignore_list = []

class CustomDirCmp(filecmp.dircmp):
    def phase3(self):
        """重写 phase3，改变内容比较的策略"""
        # 仅当文件大小相同但修改时间不同时，才进行内容比较
        for f in self.common_files:
            path1 = os.path.join(self.left, f)
            path2 = os.path.join(self.right, f)
            stat1 = os.stat(path1)
            stat2 = os.stat(path2)

            # 如果大小不同，直接认为不同，无需内容比较
            if stat1.st_size != stat2.st_size:
                if f not in self.diff_files:
                    self.diff_files.append(f)
                if f in self.same_files:
                    self.same_files.remove(f)
            # 如果大小相同，但修改时间不同，再进行内容比较
            elif stat1.st_mtime != stat2.st_mtime:
                if not filecmp.cmp(path1, path2, shallow=False):
                    if f not in self.diff_files:
                        self.diff_files.append(f)
                    if f in self.same_files:
                        self.same_files.remove(f)
                else:
                    # 内容实际相同，但修改时间不同，可以考虑更新修改时间？
                    pass
            # 如果大小和修改时间都相同，则认为文件相同（默认行为）
            else:
                if f not in self.same_files:
                    self.same_files.append(f)

cmp = filecmp.dircmp(dir1, dir2, ignore=ignore_list)
# cmp = CustomDirCmp(dir1, dir2)
results['added'] = cmp.left_only
# 找出只在dir1中存在的文件（删除文件）[3,5](@ref)
results['removed'] = cmp.right_only

# 左右文件数量相同，找出内容不同的文件（修改文件）[3,5](@ref)
for common_file in cmp.common_files:
    is_same = filecmp.cmp(os.path.join(dir1, common_file), os.path.join(dir2, common_file), shallow=True)
    if not is_same:
        results['modified'].append(common_file)
        break


# 找出内容不同的文件（修改文件）[3,5](@ref)
results['modified'] = cmp.diff_files
# 找出共同子目录[5](@ref)
results['common_dirs'] = cmp.common_dirs